// import intl from 'react-intl-universal';

const defaultMassage = '格式错误';

type PatternRule = {
    pattern: RegExp;
    message: string;
};
declare function validator(message: string, pattern?: RegExp): PatternRule;
type Validators = {
    [key: string]: typeof validator;
};
/**
 * Validator item rule
 * @function ID: 1 ～ 128 个字符，可包含小写字母、包含数字或连字符
 * @function LABEL: 1 ～ 128 个字符，以大小写字母或中文开头，可包含数字、点号（.）、下划线（_）、半角冒号（:）或连字符（-）
 * @function NAME: 1 ～ 128 个字符，以大小写字母开头，可以包括连字符（-）和数字
 * @function UNIT: 1 ～ 128 个字符，可包含小写字母、包含数字或斜线（/）
 * @function STATUS: 长度为 1 ～ 16 个字符，由小写字母组成
 * @function TYPE: 1 ～ 32 个字符，以小写字母开头、包含数字或点号（.）,点号不能连续出现，也不能是最后一个
 * @function DESCRIPTION: 长度为 0 ～ 256 个字符，不能以 http://或 https://开头
 * @function PASSWORD: 8 ～ 20 个字符，必须同时包含三项（大写字母、小写字母 、数字\\()`~!@#$%^&\*\_-+=|{}\[\]:;’<>,.?\/ 中的特殊符号）
 * @function WINDOWSPASSWORD: 同PASSWORD且不能以（/）开头
 * @function HOSTNAME: 长度为 1 ～ 64 个字符，允许使用点号（.）分隔字符成多段，每段允许使用大小写字母、数字或连字符（-），但不能连续使用点号（.）或连字符（-）。不能以点号（.）或连字符（-）开头或结尾。
 * @function IP: 满足IP格式
 * @function PHONE: 满足手机号格式
 * @function MAIL: 满足邮箱格式
 * @function PATTERN: 自定义正则表达式
 */
const validators: Validators = {
    ID: (message = defaultMassage) => ({ pattern: /^[a-z0-9-]{1,128}$/g, message }),
    LABEL: (message = defaultMassage) => ({
        pattern: /^(?=[\u4e00-\u9fa5a-zA-Z])[\u4e00-\u9fa5a-zA-Z0-9.:_-]{1,128}$/i,
        message,
    }),

    NAME: (message = defaultMassage) => ({
        pattern: /^(?=[a-zA-Z])[a-zA-Z0-9-]{1,128}$/i,
        message,
    }),
    UNIT: (message = defaultMassage) => ({ pattern: /^[a-z0-9/]{1,128}$/g, message }),
    STATUS: (message = defaultMassage) => ({ pattern: /^[a-z]{1,16}$/g, message }),
    TYPE: (message = defaultMassage) => ({
        pattern: /^(?=[a-z])(?!.*?(\.)\1.*?$)(?!.*?\.$)[a-z0-9.]{1,32}$/,
        message,
    }),
    DESCRIPTION: (message = defaultMassage) => ({
        pattern: /^(?!(([hH][tT]{2}[pP]|[hH][tT]{2}[pP][sS]):\/\/))\S{0,256}$/,
        message,
    }),
    PASSWORD: (message = defaultMassage) => ({
        pattern:
            /^(?!.{0,7}$)(?!.{21,}$)(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W`~!@#$%^&*()_+-={}|\\[\]\\:";'<>?,./]+$)(?![a-z0-9]+$)(?![a-z\W`~!@#$%^&*()_+\-={}|\\[\]\\:";'<>?,./]+$)(?![0-9\W`~!@#$%^&*()_+\-={}|\\[\]\\:";'<>?,./]+$)[a-zA-Z0-9\W`~!@#$%^&*()_+\-={}|\\[\]\\:";'<>?,./]/,
        message,
    }),
    WINDOWSPASSWORD: (message = defaultMassage) => ({
        pattern:
            /^(?!\/)(?!.{0,7}$)(?!.{10,}$)(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W`~!@#$%^&*()_+-={}|\\[\]\\:";'<>?,./]+$)(?![a-z0-9]+$)(?![a-z\W`~!@#$%^&*()_+-={}|\\[\]\\:";'<>?,./]+$)(?![0-9\W`~!@#$%^&*()_+-={}|\\[\]\\:";'<>?,./]+$)[a-zA-Z0-9\W`~!@#$%^&*()_+-={}|\\[\]\\:";'<>?,./]/,
        message,
    }),
    HOSTNAME: (message = defaultMassage) => ({
        pattern: /^(?=[a-zA-Z0-9])(?!.*?([.-])\1.*?$)(?!.*?[.-]$)[a-zA-Z0-9.-]{1,64}$/,
        message,
    }),
    IP: (message = defaultMassage) => ({
        pattern: /^((1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.){3}(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$/,
        message,
    }),
    PHONE: (message = defaultMassage) => ({
        pattern: /^(?:(?:\+|00)86)?1\d{10}$/,
        message,
    }),
    MAIL: (message = defaultMassage) => ({
        pattern:
            /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
        message,
    }),
    PATTERN: (message, pattern = /d/) => ({ pattern, message: message ?? defaultMassage }),
};

export default validators;
